uniform float time;
float rand(float co){
    return fract(sin(dot(co,12.9898+78.233))*43758.5453);
}
void mainImage(out vec4 fragcolor,in vec2 fragCoord){
    vec2 uv=fragCoord.xy/iResolution.xy;
    
    vec4 e=texture(iChannel0,uv);
    vec4 bn=e;
    
    if(time<=3.){
        fragcolor=bn;
    }
    //抖动+分通道
    if(time>3.&&time<=4.5){
        vec2 dv=vec2(.25,.25)-uv;
        //按照屏幕长宽比进行缩放
        dv=dv*vec2(100/100,1);
        //计算像素点距中点的距离
        float dis=sqrt(dv.x*dv.x+dv.y*dv.y);
        //用sin函数计算出波形的偏移值factor
        //dis在这里都是小于1的，所以我们需要乘以一个比较大的数，比如60，这样就有多个波峰波谷
        //sin函数是（-1，1）的值域，我们希望偏移值很小，所以这里我们缩小100倍，据说乘法比较快,so...
        float sinFactor=(sin(dis*1.+time*5.)+1.)*1.*.1;
        //距离当前波纹运动点的距离，如果小于waveWidth才予以保留，否则已经出了波纹范围，factor通过clamp设置为0
        float discardFactor=clamp(1.-abs(1.-dis),0.,1.);
        //归一化
        vec2 dv1=normalize(dv);
        //计算每个像素uv的偏移值
        vec2 offsets=dv1*sinFactor*discardFactor;
        //像素采样时偏移offset
        vec2 uv2=offsets+uv;
        vec2 uv3=offsets*1.2+uv;
        vec4 a=texture(iChannel0,uv2);
        vec4 b=texture(iChannel0,uv3);
        fragcolor=mix(b,mix(a,bn,.7),.7);
    }
    // 正常
    if(time>4.5){
        fragcolor=bn;
    }
    
}

